#ifndef __EVENTLOOP_H__
#define __EVENTLOOP_H__

#include <vector>
#include <map>
#include "TcpConnection.h"
#include "Sender.h"


using std::vector;
using std::map;


class Acceptor;//前向声明

class EventLoop
{

public:
    EventLoop(Sender &sender);
    ~EventLoop();

    //是否循环
    void loop();
    void unloop();

private:
    //执行epoll_wait的函数
    void waitEpollFd();
    //处理键盘输入
    void handleInput();
    //处理信息
    void handleMessage();
    //创建文件描述符epfd
    int createEpollFd();
    //将文件描述符放在红黑树上进行监听
    void addEpollReadFd(int fd);
    //将文件描述符从红黑树上删除
    void delEpollReadFd(int fd);
    //friend string highlightKeyword(const string& text, const string& keyword);

private:
    void handleRead();


private:
    int _epfd;//红黑树上的节点
    bool _isLooping;//标识循环是否进行
    Sender &_sender;//为了调用Acceptor中的accept函数
    vector<struct epoll_event> _evtList;//存放满足条件的文件描述符
    TcpConnection _conn;
};

#endif